为什么要实现共享session 您所在的位置:网站首页 php redis session共享 为什么要实现共享session

为什么要实现共享session

2023-10-15 05:31| 来源: 网络整理| 查看: 265

需要实现共享session的原因就在于,多个网站要使用同一份session数据,例如保存用户登录状态的session 相关文章: java: https://www.cnblogs.com/SimpleWu/p/10118674.html

PHP使用Redis实现Session共享: https://segmentfault.com/a/1190000019138919

PHP 实现多网站共享用户SESSION 数据解决方案: https://blog.csdn.net/u013160024/article/details/47037445

PHP实现跨服务器session共享的方法教程: https://www.cnblogs.com/furuihua/p/11468610.html

需要共用session数据的场景有哪些? 1、当服务器使用了负载均衡,多台服务器使用的都是同一套网站的代码,用户请求网站时,请求被分发到不同的服务器上。这种情况下,用户第一次请求时,在a服务器生成了sessionid,但在b服务器和c服务器并没有生成sessoinid,此时就会导致用户的登录状态出现问题,各服务器之间不能保持一致

2、当多个网站同一个服务器需要用同一个sessoinid来获取用户的登录状态时

sessoin共享的实现 session共享的情况有以下几种:

1、同服务器同域名(子域名不同): 如:a.baidu.com b.baidu.com c.baidu.com

2、同服务器不同域名 如 abc.now.com uj.after.com 3、不同服务器不同域名

第一种情况可以这样设置(如有侵权,请联系删除) session.domain 第二种情况和第三种情况比较类似,都需要做到sessionid共享和数据共享

sessionid共享可以通过跨域设置cookie来实现,如在a站登录时,设置b站的sessionid,并把sessionid当做key存入redis中,b站再通过该sessionid获取到共用的数据。但这种方式存在一种情况,就是当跨域设置b站的cookie失败时比较麻烦,因为在a站中是通过这种方式来设置b站的cookie的

数据共享可以通过将数据保存在redis、memcached、数据库来实现

session服务器共享

这个问题和cookie的跨域类似,面试的时候也很爱聊这个问题。

以前在做服务器集群的时候会碰到这样的一样问题,就是用户一会访问是处于正常登录状态,一会访问又没有登录了。这个问题偶尔才会出现。跟踪代码下去才发现session没有取到相应的值,想想也是醉了:原来服务器session没有设置共享,session存在在本地文件目录,当用户访问另外一台服务器的时候自然就取不到session了。

解决方法也不难,通过共享的存储在进行服务器之间的共享。这里使用redis的进行session存储。可以通过php.ini配置文件进行调整,也可以在代码中通过ini_set进行调整

ini_set("session.save_handler", "redis"); ini_set("session.save_path", "tcp://127.0.0.1:6379”);

如果需要使用redis进行存储,需要session中的Registered save handlers支持redis 在这里插入图片描述 php中session是否支持redis

当这样设置之后,session就会保存在redis中了,不同的集群服务器之间就可以通过该redis服务器进行共享了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有